usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceObserverExample

{

classProgram

{

staticvoidMain(string[] args)

{

ButtonPagerbuttonPager = newButtonPager();

ListPagerlistPager = newListPager();

Controlgridview = newGridView();

Controllabel = newLabel();

buttonPager.changePageHandler += newPager.ChangePageHandler(buttonPager.ChangePage);

buttonPager.changePageHandler += newPager.ChangePageHandler(gridview.ChangePage);

buttonPager.changePageHandler += newPager.ChangePageHandler(label.ChangePage);

buttonPager.changePageHandler += newPager.ChangePageHandler(listPager.ChangePage);

listPager.changePageHandler += newPager.ChangePageHandler(buttonPager.ChangePage);

listPager.changePageHandler += newPager.ChangePageHandler(gridview.ChangePage);

listPager.changePageHandler += newPager.ChangePageHandler(label.ChangePage);

listPager.changePageHandler += newPager.ChangePageHandler(listPager.ChangePage);

buttonPager.NextPage();

Console.WriteLine();

buttonPager.NextPage();

Console.WriteLine();

buttonPager.NextPage();

Console.WriteLine();

buttonPager.PreviousPage();

Console.WriteLine();

buttonPager.PreviousPage();

Console.WriteLine();

listPager.SelectPage(2);

Console.WriteLine();

listPager.SelectPage(1);

Console.WriteLine();

listPager.SelectPage(0);

}

}

abstractclassPager

{

protectedintpageIndex = 0;

publicintPageIndex

{

get{ returnpageIndex; }

set{ pageIndex = value; }

}

protectedintpageCount = 3;

publicintPageCount

{

get{ returnpageCount; }

}

publiceventChangePageHandlerchangePageHandler;

publicdelegatevoidChangePageHandler(Pagersender);

protectedvoidChangePage()

{

if(changePageHandler != null)

changePageHandler(this);

}

}

classButtonPager: Pager, Control

{

publicvoidNextPage()

{

if(pageIndex < pageCount - 1)

{

Console.WriteLine("Click NextPage Button...");

pageIndex++;

ChangePage();

}

}

publicvoidPreviousPage()

{

if(pageIndex > 0)

{

Console.WriteLine("Click PreviousPage Button...");

pageIndex--;

ChangePage();

}

}

publicvoidChangePage(Pagersender)

{

base.pageIndex = sender.PageIndex;

if(pageIndex > 0 && pageIndex < pageCount - 1)

Console.WriteLine("< >" );

elseif(pageIndex == 0)

Console.WriteLine("Next>>");

else

Console.WriteLine("<);

}

}

classListPager: Pager, Control

{

publicvoidSelectPage(intpageIndex)

{

if(pageIndex >= 0 && pageIndex < pageCount)

{

Console.WriteLine(string.Format("Click <{0}> Link...", pageIndex + 1));

base.pageIndex = pageIndex;

ChangePage();

}

}

publicvoidChangePage(Pagersender)

{

base.pageIndex = sender.PageIndex;

for(inti = 1; i <= pageCount; i++)

{

if(pageIndex + 1 == i)

Console.Write(string.Format(" <{0}> ", i));

else

Console.Write(string.Format(" {0} ", i));

}

Console.WriteLine();

}

}

interfaceControl

{

voidChangePage(Pagersender);

}

classGridView: Control

{

publicvoidChangePage(Pagersender)

{

Console.WriteLine(string.Format("GridView->Show data of page {0}", sender.PageIndex + 1));

}

}

classLabel: Control

{

publicvoidChangePage(Pagersender)

{

Console.WriteLine(string.Format("Label.Text=[{0}/{1}]", sender.PageIndex + 1, sender.PageCount));

}

}

}